package org.jpropelleralt.list;

import java.util.List;

import org.jpropelleralt.box.Box;
import org.jpropelleralt.change.Change;
import org.jpropelleralt.collection.CollectionBox;

/**
 * A {@link ListBox} is a {@link CollectionBox} where the type
 * of {@link Collection} implemented is {@link List}.
 * <p/>
 * {@link ListBox} always produces {@link Change}s of the
 * type {@link ListChange}, giving details of the changes that 
 * have occurred. 
 * <p/>
 * A {@link ListChange} is also propagated when a 
 * {@link Box} contained in the {@link ListBox} has a {@link Change}.
 * This will always be either an ALTERATION change covering the indices 
 * of the list elements that have changed in a deep way,
 * or a COMPLETE change if a more specific range cannot be identified.
 * 
 * @param <E>		The type of element in the list
 */
public interface ListBox<E> extends Box, List<E>, CollectionBox<E> {
}